package com.czm.art_light.service;


import com.czm.art_light.annotation.CacheWithLock;
import com.czm.art_light.constant.CommonConsts;
import com.czm.art_light.entity.ArtWork;
import com.czm.art_light.param.request.ArtWorkReqDto;
import com.czm.art_light.param.request.PageReqDto;
import com.czm.art_light.param.response.*;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 作品信息 接口类
 */
public interface ArtWorkService {
    /**
     * 根据作品id查找对应的作品信息
     */
    ArtWorkInfoRespDto getById(Integer id);

    /**
     * 缓存作品详细信息（除isLiked外，用户是否喜欢该艺术画）
     */
    ArtWorkInfoRespDto artworkInfoCache(ArtWork artWork);

    /**
     * 根据艺术话题的ID或者作品类别的ID或者作品的创建者的ID或者作品所属的流派的ID 进行作品分页查找
     */
    RestResp<PageRespDto<ArtWorkBasicInfoRespDto>> listArtWorkByParamId(ArtWorkReqDto artWorkReqDto);

    /**
     * 用户推荐内容
     * 目前是 艺术作品中 点击量+分享量+下载量+喜欢量
     * 如果同一数量，则按艺术作品的id降序排列
     */
    RestResp<PageRespDto<ArtWorkBasicInfoRespDto>> userRecommend(PageReqDto pageReqDto);

    /**
     * 查询所有的艺术作品信息，将其存入到ES中
     */
    List<ArtWorkEsRespDto> syncArtWorkToEs();

    /**
     * 根据艺术作品信息构建 ArtWorkEsRespDto 对象
     * @param artWork 艺术作品信息
     * @return ArtWorkEsRespDto 对象
     */
    ArtWorkEsRespDto buildArtWorkEsRespDto(ArtWork artWork);

    /**
     * 查询自指定时间以来新增或修改的艺术作品数据
     */
    List<ArtWorkEsRespDto> getModifiedArtWorks(LocalDateTime lastSyncTime);
}
